﻿//webpack  直接用这个命令行执行
//webpack --watch   自动发现文件变化执行

var webpack = require('webpack');
var path = require('path');
// 配置目录

const CURRENT_PATH = path.resolve(__dirname); // 获取到当前目录
//// 因为我们的webpack.config.js文件不在项目根目录下，所以需要一个路径的配置
const ROOT_PATH = path.join(__dirname, '../'); // 项目根目录
//const ROOT_PATH = path.resolve(__dirname);
const MODULES_PATH = path.join(ROOT_PATH, './node_modules'); // node包目录
const BUILD_PATH = path.join(ROOT_PATH, './js/'); // 最后输出放置公共资源的目录
//用于抽取公共资源
var commonsPlugin = new webpack.optimize.CommonsChunkPlugin('common.js');
module.exports = {
    context: ROOT_PATH, // 设置webpack配置中指向的默认目录为项目根目

    //页面入口文件配置 要被处理的文件
    entry: {
        //key可以是路径如 'view/main/index': './js/view/main/index.js'
        //webpackTest: './pack/js/webpackTest.js',
        // reacttest: './pack/test/reacttest.jsx',
        //exceltest: './pack/test/exceltest.jsx',
        index: './JSX/index.jsx'
        
        // index: './src/js/page/index.js',
        //支持数组形式，将加载数组中的所有模块
        //page2: ["./entry1", "./entry2"]
    },
    //入口文件输出配置 即入口文件最终要生成什么名字的文件、存放到哪里
    output: {
        path: path.resolve(__dirname, BUILD_PATH),
        filename: '[name].js'//这里的名字就是entry的键名
        //filename: '[name].js'
    },
    module: {
        //加载器配置 告知 webpack 每一种文件都需要使用什么加载器来处理。 所有加载器需要使用npm来加载
        loaders: [
            { test: /\.css$/, loader: 'style-loader!css-loader' },
            //CommonJS 解析器
            { test: /\.jsx$/, loaders: ['jsx-loader?harmony'] },
            //{
            //    test: /\.jsx?$/,
            //    exclude: /(node_modules|bower_components)/,
            //    loader: ['babel-loader'],

            //    query: {
            //        // presets: ['es2015']
            //        // 如果安装了React的话
            //        presets: ['react', 'es2015']
            //    }
            //},
            //匹配到scss后缀名的就先用sass，再用css，最后用style处理，不同的处理器通过!分隔并串联起来。
            { test: /\.scss$/, loader: 'style!css!sass?sourceMap' },
            //图片文件使用 url-loader 来处理，小于8kb的直接转为base64
            { test: /\.(png|jpg)$/, loader: 'url-loader?limit=8192' },
            {
                test: /\.jade$/,
                loader: 'jade'
            },
            //ECMAScript  解析器
            //{
            //    test: /\.js?$/,
            //    exclude: /(node_modules|bower_components)/,
            //    loader: 'babel-loader'
            //}
        ]
    },
    //其它解决方案配置 配置查找模块的路径和扩展名和别名（方便书写）
    resolve: {
        //查找module的话从这里开始查找
        // root: 'E:/github/flux-example/src', //绝对路径
        ////自动扩展文件后缀名，意味着我们require模块可以省略不写后缀名
        // extensions: ['', '.js', '.json', '.scss']
        ////模块别名定义，方便后续直接引用别名，无须多写长长的地址
        //alias: {
        //    AppStore: 'js/stores/AppStores.js',
        //    ActionType: 'js/actions/ActionType.js',
        //    AppAction: 'js/actions/AppAction.js'
        //}
    },
    // 插件项
    plugins: [
        //最小化所有JavaScript块的输出  明显使输出的js文件变小
        //new webpack.optimize.UglifyJsPlugin({
        //    compress: {
        //        warnings: false,
        //    },
        //    output: {
        //        comments: false,
        //    },
        //}),
        new webpack.DefinePlugin({
            "process.env": {
                NODE_ENV: JSON.stringify("production")
            }
        }),
        //new webpack.optimize.CommonsChunkPlugin({
        //    // 与 entry 中的  对应
        //    name: 'Commons',
        //    // 输出的公共资源名称
        //    filename: 'Commons.js',
        //    // 对所有entry实行这个规则
        //    minChunks: Infinity
        //}),
    ]
};